package Leetcode;

import java.util.HashMap;
import java.util.Map;

/**
 * @ Author     ：侯耀祖
 * @ Description：
 */
public class subarraySum {
//    public int subarraySum(int[] nums, int k) {
//        int result = 0;
//        for (int i = 0; i < nums.length; i++) {
//            int sum = 0;
//            for (int j = i; j >= 0; j--) {
//                sum += nums[j];
//                if (sum == k) {
//                    result++;
//                }
//            }
//        }
//        return result;
//    }
    public int subarraySum(int[] nums, int k) {
        int result = 0, pre = 0;
        Map<Integer, Integer> map = new HashMap<>();
        //此处初始化是处理前缀和直接等于0的情况，也就是以数组开始元素为开头的子数组
        map.put(0, 1);
        for (int i = 0; i < nums.length; i++) {
            pre += nums[i];
            if (map.containsKey(pre - k)){
                result += map.get(pre - k);
            }
            map.put(pre, map.getOrDefault(pre, 0) + 1);
        }
        return result;
    }
}
